﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Configuration;
using System.Management;
using System.Collections;
// namespaces necesarios para conexión a bd
using System.Data;
using System.Data.Common;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using Persistencia_y_capa_de_negocio;
using System.ComponentModel;

namespace Persistencia_y_capa_de_negocio
{
    public class CADActividad
    {
        private static readonly CADActividad instancia = new CADActividad();
        public static CADActividad Instancia
        {
            get { return instancia; }
        }

        private string cadCon;  // Cadena de conexión conseguida desde app.config
        private SqlDataAdapter da;
        private SqlConnection c;
        private DataSet vdb;

        public CADActividad()
        {
            cadCon = ConfigurationManager.ConnectionStrings["conexion"].ConnectionString;
            
            vdb = new DataSet();
            c = new SqlConnection(cadCon);
            da = new SqlDataAdapter("Select * from actreciente", c);

            da.Fill(vdb, "Actividad");    // Ahora tenemos todo el contenido de las actividades en local.
        }

        /// <summary>
        /// Insertamos en la base de datos una actividad
        /// </summary>
        /// <param name="ed">Variable con los datos necesarios que contiene un edificio.</param>
        public void InsertarActividad(ENActividad ac)
        {
            DataTable t = new DataTable();

            t = vdb.Tables["Actividad"];
            // Ahora tengo la tabla actividad.

            DataRow r = t.NewRow();

            //r["id"] = ac.Id;
            r["fecha"] = ac.Fecha;
            r["accion"] = ac.Accion;
            r["responsable"] = ac.Responsable;
            r["descripcion"] = ac.Descripcion;
           
            // Añadimos la nueva fila a la tabla virtual.
            t.Rows.Add(r);

            SqlCommandBuilder command = new SqlCommandBuilder(da);

            // Actualizamos los cambios en la BD real.
            da.Update(vdb, "Actividad");
        }

        /// <summary>
        /// Recoje de la base de datos la tabla actividad y nos la muestra.
        /// </summary>
        /// <returns> Devuelve un ArrayList con los datos de las últimas 15 actividades.</returns>
        public ArrayList getActividades()
        {
            ArrayList lista = new ArrayList();

            DataTable t = new DataTable();
            t = vdb.Tables["Actividad"];

            t.Rows.Clear();

            da = new SqlDataAdapter("SELECT TOP (15) * FROM ACTRECIENTE order by id desc", c);

            da.Fill(vdb, "Actividad");    // Ahora tenemos todo el contenido de edificios en local.

            t = vdb.Tables["Actividad"];

            foreach (DataRow r in t.Rows)
            {
                ENActividad ac = new ENActividad();

                // Insertamos los datos en la nueva actividad.
                //ac.Id = Convert.ToInt32(r["id"]);
                ac.Fecha = r["fecha"].ToString().Trim();
                ac.Accion = r["accion"].ToString().Trim();
                ac.Responsable = r["responsable"].ToString().Trim();
                ac.Descripcion = r["descripcion"].ToString().Trim();
                lista.Add(ac);
            }
            return lista;
        }

        /// <summary>
        /// Devuelve una arrayList con todas las actividades
        /// </summary>
        /// <returns></returns>
        public ArrayList getTodasActividades()
        {
            ArrayList lista = new ArrayList();

            DataTable t = new DataTable();
            t = vdb.Tables["Actividad"];

            t.Rows.Clear();

            da = new SqlDataAdapter("SELECT * FROM ACTRECIENTE", c);

            da.Fill(vdb, "Actividad");    // Ahora tenemos todo el contenido de edificios en local.

            t = vdb.Tables["Actividad"];

            foreach (DataRow r in t.Rows)
            {
                ENActividad ac = new ENActividad();

                // Insertamos los datos en la nueva actividad.
                //ac.Id = Convert.ToInt32(r["id"]);
                ac.Fecha = r["fecha"].ToString().Trim();
                ac.Accion = r["accion"].ToString().Trim();
                ac.Responsable = r["responsable"].ToString().Trim();
                ac.Descripcion = r["descripcion"].ToString().Trim();
                lista.Add(ac);
            }

            return lista;
        }
    }
}
